/*********************************************
 * @autheur : CHOLLET Clément                *
 * @date    : 01.04.2013                     *
 * @version : 1.0 - Création de la classe    *
 *********************************************/

#ifndef LUMIERE_H
#define LUMIERE_H

/*********************************************************************
 * Importation de la bibliothèque QT relative aux primitives OPEN GL *
 *********************************************************************/
#include <QtOpenGL>

/***************************************************************************************************************
 * Classe représentant toutes les caractéristiques nécessaires à l'élaboration d'une lumière dans une scène 3D *
 ***************************************************************************************************************/
class Lumiere
{
    //-----------------------------------------------------Constructeurs et destructeurs-----------------------------------------------------//
    public:
        //Constructeur à un paramètre
        Lumiere(GLint numero);

        //Destructeur d'une instance de la classe
        ~Lumiere();

    //-----------------------------------------------------Méthodes-----------------------------------------------------//
    public:
        //Active la lumière
        void enable();
        //Désactive la lumière
        void disable();


    //-----------------------------------------------------Accesseurs-----------------------------------------------------//
    public:
        //On affecte le numero associée à l'attribut _numeroLumiere
        void setNomLumiere(GLint numeroLumiere);

        //On affecte une couleur Rouge, Verte, Bleue et un paramètre Alpha au tableau _couleurAmbiante
        void setCouleurAmbiante(GLfloat rouge, GLfloat vert, GLfloat bleu, GLfloat alpha);

        //On affecte une couleur Rouge, Verte, Bleue et un paramètre Alpha au tableau _couleurDiffuse
        void setCouleurDiffuse(GLfloat rouge, GLfloat vert, GLfloat bleu, GLfloat alpha);

        //On affecte une couleur Rouge, Verte, Bleue et un paramètre Alpha au tableau _couleurSpeculaire
        void setCouleurSpeculaire(GLfloat rouge, GLfloat vert, GLfloat bleu, GLfloat alpha);

        //On affecte une couleur Rouge, Verte, Bleue et un paramètre Alpha au tableau _couleurReflectionSpeculaire
        void setCouleurReflectionSpeculaire(GLfloat rouge, GLfloat vert, GLfloat bleu, GLfloat alpha);

        //On affecte les coordonnées x ,y ,z à l'attribut _position
        void setPositionLumiere(GLfloat x, GLfloat y, GLfloat z, GLfloat w);

        //On affecte les coordonnées x ,y ,z à l'attribut _direction
        void setDirection(GLfloat x, GLfloat y, GLfloat z);

        //On affecte la valeur concentrationSpot à l'attribut _concentrationSpot
        void setConcentrationSpot(GLfloat concentrationSpot);

        //On affecte la valeur rayonSpot à l'attribut _rayonSpot
        void setRayonSpot(GLfloat rayonSpot);

    //--------------------------------------------------Surcharge des opérateurs-----------------------------------------------------//
    public:

    //-----------------------------------------------------Attributs-----------------------------------------------------//
    private:
        //Nom de la lumière
        GLint _numero;

        //Contient les valeurs RGBA de la composante ambiante de la lumière
        GLfloat _couleurAmbiante[4];

        //Contient les valeurs RGBA de la composante diffuse de la lumière
        GLfloat _couleurDiffuse[4];

        //Contient les valeurs RGBA de la composante spéculaire de la lumière
        GLfloat _couleurSpeculaire[4];

        //Variables pour la gestion de la composante spéculaire
        GLfloat _couleurReflectionSpeculaire[4];
        GLfloat _brillanceSpeculaire;

        //Coordonnées de la position de la lumière dans la scène 3D
        GLfloat _positionLumiere[4];

        //Coordonnées de la direction de la lumière (SPOTS)
        GLfloat _direction[3];

        //Variable pour la gestion des lumières en SPOT
        GLfloat _concentrationSpot;
        GLfloat _rayonSpot;
};

#endif // LUMIERE_H
